package view;

import java.io.IOException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;

import org.apache.struts2.ServletActionContext;
import org.xml.sax.SAXException;

import model.KlsDocumentoTransporte;
import model.KlsPosicionVehiculo;
import model.KlsVehiculo;
import com.opensymphony.xwork2.ActionSupport;

import controller.KlsDocumentoDeTransporteManager;
import controller.KlsPosicionVehiculoManager;
import controller.KlsRecorridoManager;
import controller.KlsVehiculoManager;


public class MonitoreoAction extends ActionSupport  {
	
	private static final long serialVersionUID = 1L;
	private static final int ESTADO_DOC_TRANSPORTE_NUEVO = 1;
	private static int ESTADO_VEHICULO_EN_VIAJE = 2;
	private KlsVehiculoManager vehiculoManager;
	private List<KlsVehiculo> vehiculoList;
	private KlsRecorridoManager recorridoManager;
	private List <String> datosMapa;
	private String latitudActual;
	private String longitudActual;
	
	
	
	private int idVehiculo;
	
	private String vehiculo;
	private List<KlsDocumentoTransporte> DocumentoTransporteList;
	private KlsDocumentoDeTransporteManager klsDocumentoDeTransporteManager;
	

	
	public MonitoreoAction()
	{
		klsDocumentoDeTransporteManager = new KlsDocumentoDeTransporteManager();
		
	}




	////////////////////////////////////////////////////////////////////////////////////////
	//GRABAR RECORRIDO
	////////////////////////////////////////////////////////////////////////////////////////	
	public String grabarRecorrido() {
		
    	
    	vehiculoManager = new KlsVehiculoManager();
    	vehiculoList = vehiculoManager.listPorEstado(ESTADO_VEHICULO_EN_VIAJE);
    	
		//leo varibles de sesion 
		HttpServletRequest request = ServletActionContext.getRequest();
		int idDocumentoTransporte = Integer.valueOf( request.getParameter("idDocumentoTransporte"));
		int idEstadoDocTransporte = Integer.valueOf( request.getParameter("idEstadoDocumentoTransporte"));
		
		if (idEstadoDocTransporte != ESTADO_DOC_TRANSPORTE_NUEVO)
		{
			setDocumentoTransporteList(klsDocumentoDeTransporteManager.list());
			return ERROR;
		}		
		
		
		KlsRecorridoManager klsRecorridoManager = new KlsRecorridoManager();
		klsRecorridoManager.grabarRecorrido(idDocumentoTransporte);
		
		try {
			datosMapa = klsRecorridoManager.devolverDatosMapa(klsRecorridoManager.getKlsVehiculo().getIdVehiculo()) ;
		} catch (XPathExpressionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
        //DocumentoTransporteList = klsDocumentoDeTransporteManager.list();
		return SUCCESS;
		
	}



	////////////////////////////////////////////////////////////////////////////////////////
	//EXECUTE
	////////////////////////////////////////////////////////////////////////////////////////	
	@Override
	public String execute() {  

    	vehiculoManager = new KlsVehiculoManager();
    	vehiculoList = vehiculoManager.listPorEstado(ESTADO_VEHICULO_EN_VIAJE);
        System.out.println("monitoreo Action");  
        return SUCCESS;  
    }
	
	////////////////////////////////////////////////////////////////////////////////////////
	//DEVOLVER POSICIONES DEL DIA DE PROCESO ACTION
	////////////////////////////////////////////////////////////////////////////////////////	

	public String devolverPosicionesDelDiaAction() {  
		
    	vehiculoManager = new KlsVehiculoManager();
    	//vehiculoList = vehiculoManager.list();
    	
    	idVehiculo = Integer.valueOf(vehiculo );  
    	
    	
        devolverPosicionesDelDia();
        System.out.println(" Accion :"+idVehiculo);
        return SUCCESS; 
	
	
	}
	
	////////////////////////////////////////////////////////////////////////////////////////
	//DEVOLVER POSICIONES DEL DIA DE PROCESO
	////////////////////////////////////////////////////////////////////////////////////////	

	public void devolverPosicionesDelDia( ) {  


		 List<KlsPosicionVehiculo> posVehiculoList;
	    Calendar c = Calendar.getInstance();
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		String fechaIni = df.format( c.getTime());
		
		c.add(Calendar.DAY_OF_YEAR, 1);
		
		String fechaFin = df.format( c.getTime());
		
	
    	KlsPosicionVehiculoManager klsPosicionVehiculoManager  = new KlsPosicionVehiculoManager();
    	

		posVehiculoList = klsPosicionVehiculoManager.listPosiciones(idVehiculo, fechaIni, fechaFin);
		if(!posVehiculoList.isEmpty()){
			latitudActual =String.valueOf( posVehiculoList.get(0).getLatitud());
			longitudActual =String.valueOf( posVehiculoList.get(0).getLongitud());
			System.out.println(" longitudActual :"+longitudActual);
			posVehiculoList = null;
		}
    }
   

////////////////////////////////////////////////////////////////////////////////////////
//MOSTRAR RECORRIDO
////////////////////////////////////////////////////////////////////////////////////////	
    public String mostrarRecorrido() {  

    	//TODO convertir  vehiculo-fecha a doc de transporte
    	
    	
    	vehiculoManager = new KlsVehiculoManager();
    	vehiculoList = vehiculoManager.listPorEstado(ESTADO_VEHICULO_EN_VIAJE);
    	
    	HttpServletRequest request = ServletActionContext.getRequest();
    	String sVehiculo = request.getParameter("vehiculo");
    	idVehiculo = Integer.valueOf(sVehiculo );
    	System.out.println(" Accion :"+idVehiculo);  
    	

    	recorridoManager = new KlsRecorridoManager();
    	try {
    		//TODO usar parametros enviados desde pantalla para buscar recorrido ---- esta harcodeado e doc de transporte 4
    		datosMapa = recorridoManager.devolverDatosMapa(idVehiculo); 
    		
    		if (datosMapa == null) return ERROR;
    		
    		
	        System.out.println("Datos del mapa  :"+datosMapa); 
	        
	        
	        devolverPosicionesDelDia();
	        
	        return SUCCESS;  
    	
    	} catch (SQLException e) {

			e.printStackTrace();
			return ERROR;
		} catch (IOException e) {

			e.printStackTrace();
			return ERROR;
		} catch (XPathExpressionException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return ERROR;
		} catch (ParserConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return ERROR;
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return ERROR;
		}   	

    }   
    
    public String[] getDatosMapa() {
    	String [] s = null;
    	if(datosMapa != null)
    		s = datosMapa.toArray(new String[datosMapa.size()]);

		return s;
	}


	public void setDatosMapa(List<String> datosMapa) {
		this.datosMapa = datosMapa;
	}
	
	public List<KlsVehiculo> getVehiculoList() {
		return vehiculoList;
	}


	public void setVehiculoList(List<KlsVehiculo> vehiculoList) {
		this.vehiculoList = vehiculoList;
	}



	public String getLatitudActual() {
		return latitudActual;
	}



	public void setLatitudActual(String latitudActual) {
		this.latitudActual = latitudActual;
	}



	public String getLongitudActual() {
		return longitudActual;
	}



	public void setLongitudActual(String longitudActual) {
		this.longitudActual = longitudActual;
	}



	public int getIdVehiculo() {
		return idVehiculo;
	}



	public void setIdVehiculo(int idVehiculo) {
		this.idVehiculo = idVehiculo;
	}
	
	public String getVehiculo() {
		return vehiculo;
	}



	public void setVehiculo(String vehiculo) {
		this.vehiculo = vehiculo;
	}



	public KlsVehiculoManager getVehiculoManager() {
		return vehiculoManager;
	}



	public void setVehiculoManager(KlsVehiculoManager vehiculoManager) {
		this.vehiculoManager = vehiculoManager;
	}



	public KlsRecorridoManager getRecorridoManager() {
		return recorridoManager;
	}



	public void setRecorridoManager(KlsRecorridoManager recorridoManager) {
		this.recorridoManager = recorridoManager;
	}



	public static long getSerialversionuid() {
		return serialVersionUID;
	}




	public List<KlsDocumentoTransporte> getDocumentoTransporteList() {
		return DocumentoTransporteList;
	}




	public void setDocumentoTransporteList(List<KlsDocumentoTransporte> documentoTransporteList) {
		DocumentoTransporteList = documentoTransporteList;
	}


}
